package com.hongpu.controller;

import com.hongpu.domain.SysMenu;
import com.hongpu.dto.SysMenuDto;
import com.hongpu.enums.*;
import com.hongpu.service.SysMenuService;
import com.hongpu.utils.ResultDto;
import com.hongpu.vo.SelectOptionVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 张玉胜
 * @since 2025年06月05日
 */
@RestController
@RequestMapping("/sysMenu")
public class SysMenuController {
    @Autowired
    private SysMenuService sysMenuService;

    /**
     * 菜单类型下拉列表选项
     */
    @GetMapping("/menuTypeList")
    public ResultDto menuTypeList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        MenuTypeEnum[] menuTypeEnums = MenuTypeEnum.values();
        if (menuTypeEnums != null && menuTypeEnums.length > 0) {
            for (MenuTypeEnum menuTypeEnum : menuTypeEnums) {
                SelectOptionVo<String> optionVo = new SelectOptionVo();
                optionVo.setLabel(menuTypeEnum.getDesc());
                optionVo.setValue(menuTypeEnum.getValue());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }

    /**
     * 菜单打开方式
     */
    @GetMapping("/menuOpenWithList")
    public ResultDto menuOpenWithList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        MenuOpenWithEnum[] menuOpenWithEnums = MenuOpenWithEnum.values();
        if (menuOpenWithEnums != null && menuOpenWithEnums.length > 0) {
            for (MenuOpenWithEnum menuOpenWithEnum : menuOpenWithEnums) {
                SelectOptionVo<String> optionVo = new SelectOptionVo();
                optionVo.setLabel(menuOpenWithEnum.getDesc());
                optionVo.setValue(menuOpenWithEnum.getValue());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }

    /**
     * 菜单可见
     */
    @GetMapping("/menuVisibleList")
    public ResultDto menuVisibleList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        MenuVisibleEnum[] menuVisibleEnums = MenuVisibleEnum.values();
        if (menuVisibleEnums != null && menuVisibleEnums.length > 0) {
            for (MenuVisibleEnum menuVisibleEnum : menuVisibleEnums) {
                SelectOptionVo<String> optionVo = new SelectOptionVo();
                optionVo.setLabel(menuVisibleEnum.getDesc());
                optionVo.setValue(menuVisibleEnum.getValue());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }

    /**
     * 打开菜单选项卡是否刷新页面
     */
    @GetMapping("/isRefreshList")
    public ResultDto isRefreshList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        IsRefreshEnum[] isRefreshEnums = IsRefreshEnum.values();
        if (isRefreshEnums != null && isRefreshEnums.length > 0) {
            for (IsRefreshEnum isRefreshEnum : isRefreshEnums) {
                SelectOptionVo<String> optionVo = new SelectOptionVo();
                optionVo.setLabel(isRefreshEnum.getDesc());
                optionVo.setValue(isRefreshEnum.getValue());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }

    /**
     * 是否缓存
     */
    @GetMapping("/isCacheList")
    public ResultDto isCacheList() {
        List<SelectOptionVo> optionList = new ArrayList<>();
        YesOrNoEnum[] yesOrNoEnums = YesOrNoEnum.values();
        if (yesOrNoEnums != null && yesOrNoEnums.length > 0) {
            for (YesOrNoEnum yesOrNoEnum : yesOrNoEnums) {
                SelectOptionVo<Integer> optionVo = new SelectOptionVo();
                optionVo.setLabel(yesOrNoEnum.getDesc());
                optionVo.setValue(yesOrNoEnum.getValue());
                optionList.add(optionVo);
            }
        }
        return ResultDto.ok(optionList);
    }


    /**
     * 新增
     */
    @PostMapping("/add")
    public ResultDto add(@RequestBody SysMenu sysMenu) {
        return sysMenuService.add(sysMenu);
    }
    /**
     * 修改
     */
    @PostMapping("/update")
    public ResultDto update(@RequestBody SysMenu sysMenu){
        boolean update = sysMenuService.update(sysMenu);
        if(!update){
            return ResultDto.fail();
        }
        return ResultDto.ok();
    }
    /**
     * 删除
     */
    @GetMapping("/delete/{menuId}")
    public ResultDto delete(@PathVariable("menuId") Long menuId){
        boolean delete = sysMenuService.delete(menuId);
        if(!delete){
            return ResultDto.fail();
        }
        return ResultDto.ok();
    }
    /**
     * 启用
     */
    @GetMapping("/active/{menuId}")
    public ResultDto active(@PathVariable("menuId") Long menuId){
        boolean active = sysMenuService.active(menuId);
        if(!active){
            return ResultDto.fail();
        }
        return ResultDto.ok();
    }
    /**
     * 新增角色时用到的菜单下拉列表树
     */
    @GetMapping("/menuTreeList")
    public ResultDto menuTreeList() {
        return sysMenuService.menuTreeList();
    }
    /**
     * 分页
     */
    @PostMapping("/list")
    public ResultDto list(@RequestBody SysMenuDto sysMenuDto) {
        return sysMenuService.list(sysMenuDto);
    }
}